/*
 * create by straysnail
 * 2022/2/26
 */
#define head_ser 12  //定义舵机的引脚
int pulsewidth = 0; //变量，用于计算舵机脉冲值

void setup() {
  pinMode(head_ser,OUTPUT); //设置引脚为输出状态
}

void loop() {
  procedure(head_ser, 0);  //舵机转到0度
  delay(500);      //给舵机转动的时间
  procedure(head_ser, 90);  //90度
  delay(500);
  procedure(head_ser, 180); //180度
  delay(500);
  procedure(head_ser, 90);  //90度
  delay(500);
}

//根据舵机原理控制舵机角度的函数
void procedure(int serPin, int myangle)   //函数有两个参数，serPin是舵机的引脚，myangle是舵机的角度
{
  for(int i=0; i<10; i++)
  {
    //计算脉冲值，也就是高电平的时间，myangle值范围是0~180，对应得到pulsewidth的范围是500~2480
    pulsewidth = myangle * 11 + 500;  
    digitalWrite(serPin,HIGH);
    delayMicroseconds(pulsewidth);  //延时计算好的高电平时间
    digitalWrite(serPin,LOW); //设置为低电平
    delay((20 - pulsewidth / 1000));  //延时剩余的低电平时间
  }
  
}
